var express = require('express');
var router = express.Router();
var jwt = require('jsonwebtoken')
var { floginModel } = require('../db/model')
const tencentcloud = require("tencentcloud-sdk-nodejs-sms")

//发送短信代码
// function getCode(phone, code) {
//   // 导入对应产品模块的client models。
//   const smsClient = tencentcloud.sms.v20210111.Client
//   /* 实例化要请求产品(以sms为例)的client对象 */
//   const client = new smsClient({
//     credential: {
//       secretId: "AKIDutkUI6xgRlEaorhKn25ywnZThipmdvaB",
//       secretKey: "UnwrdDdXVKQWvCNM8vcFrPp8HNQK6hDU",
//     },
//     region: "ap-beijing",
//     profile: {
//       httpProfile: {
//         endpoint: "sms.tencentcloudapi.com"
//       },
//     },
//   })
//   const params = {
//     "SmsSdkAppId": "1400852890",
//     "SignName": "一个鹏的公众号",
//     "TemplateId": "1937785",
//     "TemplateParamSet": [code],
//     "PhoneNumberSet": ["+86" + phone],
//   }
//   client.SendSms(params, function (err, response) {
//     // 请求异常返回，打印异常信息
//     if (err) {
//       console.log(err)
//       return false
//     }
//   })
//   return true
// }


/* 获取随机验证码4位数 */
function createId() {
  // 目标范围：1000~9000
  var temp = Math.random() * 9000; //[0，9000) 
  // 获取1000~9000
  temp = 1000 + parseInt(temp);
  return temp + '';
}
//存储各个手机号验证码列表
let phoneCode = []
//获取验证码接口API
router.post('/code', function (req, res, next) {
  const { phone } = req.body
  const obj = { phone, code: createId() }
  const index = phoneCode.findIndex(item => item.phone == phone)
  if (index !== -1) phoneCode.splice(index, 1, obj)
  else phoneCode.push(obj)
  //把验证码发送到手机号上
  // const flag = getCode(phone, obj.code)
  // //验证是否发生成功
  // if (!flag) return res.send({ code: 404, msg: '获取验证码失败' })
  res.send({
    code: 200,
    msg: '获取验证码成功',
    phoneCodes: obj.code
  })
});
router.post('/login', async (req, res) => {
  const { phone, code } = req.body
  const index = phoneCode.findIndex(item => item.phone == phone)
  //服务器再次验证，验证码是否正确
  if (phoneCode[index].code != code) return res.send({ code: 404, msg: '验证码错误' })
  let user = await floginModel.findOne({ phone: phone })
  //判断该手机用户是否已经存在
  if (!user) user = await floginModel.create({ phone })
  phoneCode.splice(index, 1) //登录后删除当前手机号的验证码
  let token = "Bearer " + jwt.sign({ phone: phone, _id: user._id }, 'lce', { expiresIn: 60 })
  res.send({
    code: 200,
    user, token
  })
})

//刷新token
router.post('/refresh', async (req, res) => {
  const { token } = req.body
  const tokens = refreshToken(token)
  res.send({
    code: 200,
    tokens
  })
})

// 刷新Token
function refreshToken(token) {
  const decodedToken = decodeToken(token);
  // 生成新的Token
  const newToken = generateToken(decodedToken.phone, decodedToken._id);
  // 在这里将新的Token存储到数据库或缓存中，以便后续的验证和使用
  return newToken;
}

// 解码Token
function decodeToken(token) {
  // 在这里解码Token，获取其中的信息
  // 例如，可以使用jsonwebtoken库进行解码
  const decoded = jwt.verify(token, 'secretKey');
  // 返回解码后的Token信息
  return decoded;
}

// 生成Token
function generateToken(phone, _id) {
  // 在这里生成新的Token
  // 例如，可以使用jsonwebtoken库进行生成
  const token = jwt.sign({ phone, _id }, 'secretKey', { expiresIn: '1h' });
  // 返回生成的Token
  return token;
}


module.exports = router;
